package com.shihan.rabbitmq.demo;

import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.UnsupportedEncodingException;

/**
 * @Description
 * @Author shihan
 * @Date 2020/12/26 15:06
 * @Version 1.0
 */
public class ProducerApp {

    public static void main(String[] args) throws UnsupportedEncodingException {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("rabbit-context.xml");

        // 从 IOC 容器中，拿到 RabbitTemplate 对象，里面封装了对 Rabbit MQ 的一些操作；
        RabbitTemplate rabbitTemplate = context.getBean(RabbitTemplate.class);

        // 发送消息：1、准备消息；2、指明 Exchange 交换器；3、指定 Routing key；
        // 1、准备消息
        MessagePropertiesBuilder mpBuilder = MessagePropertiesBuilder.newInstance();
        mpBuilder.setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN);
        mpBuilder.setContentEncoding("gbk");

        for (int i = 0; i < 10; i++) {
            // 消息，不仅有消息内容体，还有消息内容的字符编码、内容对象类型、消息属性信息、消息头信息 等内容！
            Message msg = MessageBuilder.withBody("你好，世界！".getBytes("gbk"))
                    .andProperties(mpBuilder.build()).build();

            // 2、3：指明 Exchange 和 Routing key
            // 4、通过 rabbitTemplate 进行 Rabbit MQ 的相关操作！
            rabbitTemplate.send("exc.direct.name01","rk.direct",msg);
        }

        context.close();
    }

}
